package com.example.commom.comment;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;


// 是一个元注解,用于指示注解是否会出现在文档中。
// 当一个注解添加了 @Documented 注解,它将出现在生成的 Java 文档中,
// 以便用户能够看到它及其相关信息
@Documented

// 是一个用于创建自定义校验注解的元注解。它接受一个 validatedBy 参数,
// 用于指定该自定义注解使用的校验器类。
// 在这里示例中，指定了 BooleanValueValidator.class,
// 表示 @BooleanValue 注解使用了 BooleanValueValidator 类作为校验器。
@Constraint(validatedBy = BooleanValueValidator.class)

// 是一个元注解, 用于指定注解可以应用于哪些元素上。
// 在这里示例中 指定了 ElementType.FIELD，表示 @BooleanValue 注解只能应用于类的字段上
@Target({ElementType.FIELD})

// 是一个元注解，用于指定注解在运行时的保留策略。在这里示例中,
// 使用了 RetentionPolicy.RUNTIME，表示 @BooleanValue 注解将在运行时保留,
// 以便通过反射来获取并使用注解信息
@Retention(RetentionPolicy.RUNTIME)
public @interface BooleanValue {

    // message() 是一个注解属性，用于指定校验失败时的错误提示信息。
    // 默认的错误提示信息是 “值必须为 true 或 false”。当校验失败时, 这个错误消息将被返回给调用方。
    String message() default "值必须为 true 或 false";

    // groups() 是一个注解属性，用于指定校验的分组。分组是一种将校验规则按照不同的场景进行分组管理的机制。
    // 在示例中，默认的校验分组为空, 即不进行分组校验。
    Class<?>[] groups() default {};

    // payload() 是一个注解属性，用于指定负载对象的接口类型。负载对象是用于封装校验的元数据的对象,
    // 可以用来为校验提供更多的上下文信息。在示例中，默认的负载对象为空，即不提供额外的元数据信息。
    Class<? extends Payload>[] payload() default {};
}